/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package views.utilitario;

import models.entidades.AtributoDimensao;
import models.entidades.ComportamentoAtributo;
import models.entidades.RestricaoNulidade;

/**
 *
 * @author Wenderson
 */
public class AtributosDimSem extends AbstractTabelaDinamica {
    private String schema;
    private String nomeTabela;
    private String nomeAtributo;
    private String tipo;
    private int tamanho;
    private int precisao;
    private int scala;
    private boolean surrogateKey;
    private boolean chaveNatural;
    private boolean nulo;
    private String auditoria;
    private int comportamento;
    
    public AtributosDimSem() {};
    
    public AtributosDimSem(AtributosDescricao atributo) {
        this.schema = atributo.getSchema();
        this.nomeTabela = atributo.getNomeTabela();
        this.nomeAtributo = atributo.getNomeAtributo();
        this.tipo = atributo.getTipo();
        this.tamanho = atributo.getTamanho();
        this.precisao = atributo.getPrecisao();
        this.scala = atributo.getScala();
        this.chaveNatural = false;
        this.surrogateKey = false;
        this.nulo = false;
        this.auditoria = "NENHUM";
        this.comportamento = 1;
    }

    @Override
    public String[] getColumns() {
        return new String[] {"Schema", "Tabela", "Nome", "Tipo", "Chave", "Surrogate Key", "Nulo", "Auditoria", "Tipo Comp."};
    }

    @Override
    public Class getClass(int index) {
        switch (index) {
            case 0:
            case 1:
            case 2: 
            case 3: return String.class;
            case 4:
            case 5:
            case 6: return Boolean.class;
            case 7: return String.class;
            case 8: return Integer.class;
            default: return Object.class;
        }
    }

    @Override
    public Object getValue(int index) {
        switch (index) {
            case 0: return this.schema;
            case 1: return this.nomeTabela;
            case 2: return this.nomeAtributo;
            case 3: return this.tipo;
            case 4: return this.chaveNatural;
            case 5: return this.surrogateKey;
            case 6: return this.nulo;
            case 7: return this.auditoria;
            case 8: return this.comportamento;
            default: return null;
        }
    }

    @Override
    public void setValue(int index, Object value) {
        switch (index) {
            case 0: this.schema = (String) value; break;
            case 1: this.nomeTabela = (String) value; break;
            case 2: this.nomeAtributo = (String) value; break;
            case 3: this.tipo = (String) value; break;
            case 4: this.chaveNatural = (Boolean) value; break;
            case 5: this.surrogateKey = (Boolean) value; break;
            case 6: this.nulo = (Boolean) value; break;
            case 7: this.auditoria = (String) value; break;
            case 8: this.comportamento = Integer.valueOf(value.toString()); break;
        }
    }

    @Override
    public boolean isEditable(int index) {
        switch (index) {
            case 0:
            case 1:
            case 2:
            case 3: return false;
            case 4:
            case 5:
            case 6:
            case 7: 
            case 8: return true;
            default: return false;
        }
    }
    
    public AtributoDimensao getAtributoDim() {
        AtributoDimensao atrDim = new AtributoDimensao();
        atrDim.setNome(this.nomeAtributo);
        atrDim.setTipoDado(this.tipo);
        atrDim.setTamanho(this.tamanho);
        atrDim.setPrecisao(this.precisao);
        atrDim.setEscala(this.scala);
        
        //TODO: TAB AUX - AUDITORIA
        
        RestricaoNulidade rn = new RestricaoNulidade();
        rn.setCdNulidade(this.nulo ? 1 : 2);
        
        atrDim.setRestricaoNulidade(rn);
        
        ComportamentoAtributo ca = new ComportamentoAtributo();
        ca.setCdCompAtr(this.comportamento == 1 ? 1 : 2);
        
        atrDim.setComportamentoAtributo(ca);
        
        return atrDim;
    }

    public String getAuditoria() {
        return auditoria;
    }

    public void setAuditoria(String auditoria) {
        this.auditoria = auditoria;
    }

    public boolean isChaveNatural() {
        return chaveNatural;
    }

    public void setChaveNatural(boolean chaveNatural) {
        this.chaveNatural = chaveNatural;
    }

    public String getNomeAtributo() {
        return nomeAtributo;
    }

    public void setNomeAtributo(String nomeAtributo) {
        this.nomeAtributo = nomeAtributo;
    }

    public String getNomeTabela() {
        return nomeTabela;
    }

    public void setNomeTabela(String nomeTabela) {
        this.nomeTabela = nomeTabela;
    }

    public boolean isNulo() {
        return nulo;
    }

    public void setNulo(boolean nulo) {
        this.nulo = nulo;
    }

    public int getPrecisao() {
        return precisao;
    }

    public void setPrecisao(int precisao) {
        this.precisao = precisao;
    }

    public int getScala() {
        return scala;
    }

    public void setScala(int scala) {
        this.scala = scala;
    }

    public String getSchema() {
        return schema;
    }

    public void setSchema(String schema) {
        this.schema = schema;
    }

    public boolean isSurrogateKey() {
        return surrogateKey;
    }

    public void setSurrogateKey(boolean surrogateKey) {
        this.surrogateKey = surrogateKey;
    }

    public int getTamanho() {
        return tamanho;
    }

    public void setTamanho(int tamanho) {
        this.tamanho = tamanho;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public int getComportamento() {
        return comportamento;
    }

    public void setComportamento(int comportamento) {
        this.comportamento = comportamento;
    }
}
